package com.wust.eim.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.wust.eim.exception.WustEimException;
import com.wust.eim.mapper.TblStudentMapper;
import com.wust.eim.po.ActiveUser;
import com.wust.eim.po.TblStudent;
import com.wust.eim.po.TblStudentExample;
import com.wust.eim.service.MasterService;
import com.wust.eim.utils.MD5;

/**
 * @ClassName MasterServiceImpl
 * @Description TODO(认证授权服务实现类)
 * @author hanyajun
 * @Date 2017年3月20日 下午2:29:42
 * @version 1.0.0
 */
public class MasterServiceImpl implements MasterService {

    @Autowired
    private TblStudentMapper tblStudent;

    @Override
    public ActiveUser authenticat(String userCode, String password) throws Exception {
        /**
         * 认证过程： 根据用户身份（账号）查询数据库，如果查询不到用户不存在 对输入的密码 和数据库密码 进行比对，如果一致，认证通过
         */
        // 根据用户账号查询数据库
       TblStudent student = this.findstudentByUserCode(userCode);

        if (student == null) {
            // 抛出异常
            throw new WustEimException("用户账号不存在");
        }

        // 数据库密码 (md5密码 )
        String password_db = student.getPassword();

        // 对输入的密码 和数据库密码 进行比对，如果一致，认证通过
        // 对页面输入的密码 进行md5加密
        String password_input_md5 = new MD5().getMD5ofStr(password);
        if (!password_input_md5.equalsIgnoreCase(password_db)) {
            // 抛出异常
            throw new WustEimException("用户名或密码 错误");
        }
        // 得到用户id
      /*  String userid = student.;*/
        // 根据用户id查询菜单
        // 认证通过，返回用户身份信息
        ActiveUser activeUser = new ActiveUser();
        activeUser.setUserid(student.getSid());
        activeUser.setUsercode(userCode);
        activeUser.setUsername(student.getName());// 用户名称

      /*  // 放入权限范围的菜单和url
        activeUser.setMenus(menus);
        activeUser.setPermissions(permissions);*/

        return activeUser;
    }

    @Override
    public TblStudent findstudentByUserCode(String userCode) throws Exception {
        // 根据用户账号查询用户信息
        TblStudentExample studentExample = new TblStudentExample();
        TblStudentExample.Criteria criteria = studentExample.createCriteria();
        criteria.andStudentNumberEqualTo(userCode);
        List<TblStudent> students = tblStudent.selectByExample(studentExample);
        if (students != null && students.size() == 1) {
            return students.get(0);
        }

        return null;

    }

}
